package com.example.spindrift.Controllers;

import com.example.spindrift.common.ResponseCode;
import com.example.spindrift.dao.SysRoleMapper;
import com.example.spindrift.dao.SysUserMapper;
import com.example.spindrift.models.SysRole;
import com.example.spindrift.models.SysUser;
import com.example.spindrift.models.paramModel.Login;
import com.example.spindrift.service.RoleService;
import com.example.spindrift.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/User")
public class UserController {
    @Autowired
    UserService userService;
    @Autowired
    RoleService roleService;

    /**
     * 获取所有用户信息
     * @return
     */
    @GetMapping("/getAllUser")
    public Object getAllUser(){
        return userService.getAllUser();
    }

    /**
     * 根据用户ID获取用户信息
     * @param user_id 用户ID
     * @return
     */
    @GetMapping("/getUserById")
    public Object getUserById(@RequestParam Integer user_id){
        return userService.getUserById(user_id);
    }

    /**
     * 根据用户名搜索用户信息
     * @param keyword 搜索关键字
     * @return
     */
    @GetMapping("/searchUser")
    public Object searchUser(@RequestParam String keyword){
        return userService.searchUser(keyword);
    }

    /**
     * 根据一个或多个角色ID获取用户信息
     * @param roles 角色ID字符
     * @return
     */
    @GetMapping("/getUserByRoleId")
    public List<SysUser> getUserByRoleId(@RequestParam String roles) {
        return userService.getUserByRoleId(roles);
    }

    /**
     * 用户注册
     * @param user
     * @return
     */
    @PostMapping("/register")
    public Integer register(@RequestBody SysUser user) {
        return userService.insertUser(user);
    }

    /**
     * 根据用户ID删除一条用户信息
     * @param userId 用户ID
     * @return
     */
    @DeleteMapping("/deleteUser")
    public Integer deleteUser(@RequestParam Integer userId) {
        return userService.deleteUser(userId);
    }

    /**
     * 更新一条用户信息
     * @param user 用户信息
     * @return
     */
    @PutMapping("/updateUser")
    public Integer updateUser(@RequestBody SysUser user) {
        return userService.updateUser(user);
    }

    /**
     * 禁用一个用户（账号）
     * @param userId 用户ID
     * @return
     */
    @GetMapping("/forbiddenUser")
    public Boolean forbiddenUser(@RequestParam Integer userId) {
        return userService.forbiddenUser(userId) > 0;
    }

    /**
     * 启用一个用户（账号）
     * @param userId 用户ID
     * @return
     */
    @GetMapping("/startUser")
    public Boolean startUser(@RequestParam Integer userId) {
        return userService.startUser(userId) > 0;
    }

    /**
     * 更新用户的角色信息
     * @param userId 用户ID
     * @param roles 新的角色字符（1，2，3）
     * @return
     */
    @DeleteMapping("/updateUserRole")
    public Boolean updateUserRole(@RequestParam String userId, @RequestParam String roles) {
        return userService.updateUserRole(userId,roles) > 0;
    }

    /**
     * 删除指定用户的指定一个或多个角色
     * @param userId 用户ID
     * @param roles 角色ID
     * @return
     */
    @DeleteMapping("/deleteUserRole")
    public Boolean deleteUserRole(@RequestParam String userId, @RequestParam String roles) {
        return userService.deleteUserRole(userId,roles) > 0;
    }

    /**
     * 给指定用户添加一条角色信息
     * @param userId 用户ID
     * @param roles　角色信息
     * @return
     */
    @GetMapping("/addUserRole")
    public Boolean addUserRole(@RequestParam String userId, @RequestParam String roles) {
        return userService.addUserRole(userId,roles) > 0;
    }

    /**
     * 用户登录
     * @return
     */
    @PostMapping("/login")
    public Object login(@RequestBody Login login){
        SysUser us = userService.getUserByLogin(login.account,login.pwd);
        if(us == null){
            return null;
        }else{
            return us;
        }
    }

    /**
     * 管理员登录
     * @return
     */
    @PostMapping("/adminLogin")
    public Object adminLogin(@RequestBody Login login){
        SysUser user = (SysUser) this.login(login);
        if(user != null){
            List<SysRole> roles = roleService.getRoleByUserId(user.user_id);
            for(int i=0;i<roles.size();i++){
                if(roles.get(i).role_id == 1){
                    return user;
                }
            }
        }
        return null;
    }
}
